package com.mrogrape.notepad.common;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Window;

import javax.swing.JOptionPane;
import javax.swing.text.StyleContext;

import com.mrogrape.notepad.data.ViewContext;
import com.mrogrape.notepad.resource.Strings;


public class ViewUtils {

	/** Yes */
	public static final int YES_OPTION = JOptionPane.YES_OPTION;

	/**  */
	public static final int OK_OPTION = JOptionPane.OK_OPTION;

	/** No */
	public static final int NO_OPTION = JOptionPane.NO_OPTION;

	/** Cancel */
	public static final int CANCEL_OPTION = JOptionPane.CANCEL_OPTION;


	/**
	 * 显示一个消息对话框。
	 * 
	 * @param parent 父组件
	 * @param message 消息
	 */
	public static void showInformationDialog(Component parent, String message){

		JOptionPane.showMessageDialog(parent, message, "消息", JOptionPane.INFORMATION_MESSAGE);
	}

	/**
	 * 显示一个错误对话框。
	 * 
	 * @param parent 父组件
	 * @param message 消息
	 */
	public static void showErrorMessageDialog(Component parent, String message){

		if(parent == null){
			parent = (Component) ViewContext.getMainFrame();
		}

		JOptionPane.showMessageDialog(parent, message, Strings.Other.ERROR, JOptionPane.ERROR_MESSAGE);
	}

	/**
	 * 显示一个“确定”和“取消”对话框。
	 * @param parent
	 * @param title
	 * @param message
	 */
	public static int showOkCancelDialog(Component parent, String title, String message){

		if(parent == null){
			parent = (Component) ViewContext.getMainFrame();
		}

		return JOptionPane.showConfirmDialog(parent, message, title, JOptionPane.OK_CANCEL_OPTION);
	}

	/**
	 * 显示一个具有“是”，“否”和“取消”三个操作按钮的确认对话框。
	 * 
	 * @param comp 父面板
	 * @param title 标题
	 * @param mess 显示的消息
	 * @return 用户选择的选项
	 */
	public static int showYesNoCancelDialog(Component comp, String title, String mess){

		return JOptionPane.showConfirmDialog(comp, mess, title, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null);
	}

	/**
	 * 显示一个输入对话框。
	 * 
	 * @param c
	 * @param title
	 * @param message
	 * @return
	 */
	public static String showInputDialog(Component c, String title, String message){

		return JOptionPane.showInputDialog(c,message,title,JOptionPane.QUESTION_MESSAGE);
	}

	/**
	 * 将一个组件在其父组件中居中。
	 * 
	 * @param parent
	 * @param child
	 */
	public static void setCenterParent(Component parent, Component child){

		Dimension psize = parent.getSize();
		Dimension csize = child.getSize();

		int x = (psize.width - csize.width) / 2;
		int y = (psize.height - csize.height) / 2;

		if((child instanceof Window) && (parent instanceof Window)){

			x = x + parent.getX();
			y = y + parent.getY();
		}

		child.setLocation(x, y);
	}

	/**
	 * 创建新的字体。
	 * 
	 * @param family
	 * @param style
	 * @param size
	 * @return
	 */
	public static Font createNewFont(String family, int style, int size){

		return StyleContext.getDefaultStyleContext().getFont(family, style, size);
	}
}
